SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO

CREATE PROCEDURE [dbo].[SP_TXMVTO_CNTB_D04]
/*-------------------------------------------------------------------*/                    
/*----- Empresa           : OFISIS S.A.                          ----*/                    
/*----- Cliente           : OFISIS S.A.                          ----*/                    
/*----- Sistema           : Contabilidad                         ----*/                    
/*----- Modulo            : Empresa                              ----*/                    
/*----- Programa          : Proceso de mayorizacion              ----*/                    
/*----- Nombre            : PN_TXMVTO_CNTB_D01                   ----*/                    
/*----- Script            : TXMVTO_CNTB                          ----*/                    
/*----- Desarrollado por  : LMGP		                 ----*/                    
/*----- Fecha             : 07/11/2003                           ----*/                    
/*----- Base de Datos     : MS SQL Server                        ----*/                    
/*----- Version BD        : 7.0                                  ----*/                    
/*-------------------------------------------------------------------*/                    
/*-------------------------------------------------------------------*/                    
/*----- Comentarios  : Se lanza desde el trigger:                ----*/                    
/*----- TD_TXMVTO_CNTB_D01 y tU_TXMVTO_CNTB_U01			 ----*/                    
/*----- Es un proceso unitario (por cada registro eliminado)     ----*/                    
/*-------------------------------------------------------------------*/   
/*----- GRANT EXECUTE ON SP_TXMVTO_CNTB_D04 TO PUBLIC            ----*/                    
/*-------------------------------------------------------------------*/   
@ISCO_EMPR  	TD_VC_002,
@INNU_CNTB_EMPR TD_IN_001_CONT,
@ISCO_UNID_CNTB TD_VC_003,
@ISCO_OPRC_CNTB TD_VC_003,
@INNU_ANNO  	TD_IN_004_ANNO,
@INNU_MESE	TD_IN_002_MESE,
@ISNU_ASTO      TD_VC_010,
@INNU_SECU	TD_IN_001,
@ISCO_CNTA_EMPR	TD_VC_020
As  
Begin  
Declare   
@CSCO_EMPR       TD_VC_002,  
@CNNU_CNTB_EMPR  TD_IN_001,  
@CNNU_ANNO       TD_IN_001,  
@CNNU_MESE       TD_IN_001,  
@CNNU_SECU  	 TD_IN_002,  
@CSCO_MONE       TD_VC_003,  
-------- Variables Gesti>n en L-nea ---------  
@CSCO_CNTA_CONT  TD_VC_020_CNTA,  
@CSCO_CNTA_DEST  TD_VC_020_CNTA,  
@CSCO_CNTA_EMPR  TD_VC_020_CNTA,  
@CSCO_ORDE_SERV         TD_VC_020,  
@VNNU_SECU  TD_IN_002,  
@CDFE_ASTO_CNTB   TD_DT_001,  
@CSTI_CAMB  TD_VC_003,  
@CNFA_CAMB   TD_NU_015_006,  
@CNIM_MVTO_ORIG  TD_NU_016_004,  
@CNIM_MVTO_CNTB  TD_NU_016_004,  
@VSTI_OPER  TD_VC_003,  
@CSTI_OPER_CNTB  TD_VC_003,  
@CSDE_GLOS  TD_VC_100,  
@CSCO_OPRC_ORIG      TD_VC_003,  
@CSCO_UNID_ORIG         TD_VC_003,  
@CSNS_ASTO_ORIG         TD_VC_010,  
@CDFE_DOCU_VENC  TD_DT_001,   
@CNFA_CAMB_DIAR  TD_NU_015_006,   
@CDFE_DOCU_REFE  TD_DT_001,   
@VSCO_OPRC_GEST      TD_VC_003,  
@CNNU_PROC  TD_IN_001,   
@CNNU_PROC_SECU  TD_IN_001,  
@CSTI_AUXI_EMPR   TD_VC_001,  
@CSCO_AUXI_EMPR   TD_VC_020,  
@CSST_AUXI_EMPR       TD_VC_001,  
@VSST_AUXI_DEST       TD_VC_001,  
@VSST_AUXI_CONT       TD_VC_001,  
@VNFA_CMPR_OFIC         TD_NU_015_006,  
@VNFA_VNTA_OFIC         TD_NU_015_006,   
@VNFA_CAMB_DIAR         TD_NU_015_006,  
@VSCO_MONE  TD_VC_003,  
@VSCO_CNTA_DEST    TD_VC_020,  
@VSCO_CNTA_CONT     TD_VC_020,  
@VSST_CNTA_CAMB     TD_VC_003,  
@VSST_AUXI_0001     TD_VC_001,  
@VSST_AUXI_0002     TD_VC_001,  
@VSST_ASIE_GEST     TD_VC_003,  
@CSSI_MVTO_CNTB     TD_VC_003,  
@VSNU_ASTO           TD_VC_010,  
@VSNU_ASTO_0001         TD_VC_010,  
@VSST_GEST_LINE      TD_VC_001,  
@VSCO_OPRC_0001      TD_VC_003,  
@VSST_ASIE_APRO      TD_VC_001,  
@VSST_ORDE_0001         TD_VC_001,  
@VSST_ORDE_0002         TD_VC_001,  
@VSTI_AUXI_EMPR   TD_VC_001,  
@VSCO_AUXI_EMPR   TD_VC_020,  
@VSCO_ORDE_SERV         TD_VC_020,  
-------- Variables Fecha de Proceso ---------------  
@CSCO_UNID_CNTB   TD_VC_003,  
@CSCO_OPRC_CNTB      TD_VC_003,  
@CSNU_ASTO              TD_VC_010,  
@CSTI_OPER  TD_VC_003,  
@VNIM_CARG_ORIG         TD_NU_016_004,  
@VNIM_ABON_ORIG         TD_NU_016_004,  
@VNIM_CARG_CNTB         TD_NU_016_004,  
@VNIM_ABON_CNTB         TD_NU_016_004,  
@VSST_CIER_CNTB         TD_VC_001,  
@VSDE_ERRO  TD_VC_050,  
-------- Variables Mayorizaci>n en L-nea ---------  
@VSPR_DATO  TD_VC_020,  
@VNNV_INFO_CNTA         TD_IN_001,  
@VSNV_QUIE_CNTA         TD_VC_020,  
@VNCA_INIC              TD_IN_001,  
@VNCA_LONG              TD_IN_001,  
@VNCA_LONG_AUXI         TD_IN_001,  
@VNNV_AUXI              TD_IN_001,  
@VNNU_FINA              TD_IN_001,  
@VSCO_OPRC_CNTB         TD_VC_003,  
-------- Variables Actualiza Datos Reales ---------  
@CNNU_SECU_MVTO         TD_IN_001,  
@VNIM_MVTO_ORIG         TD_NU_016_004,  
@VNIM_MVTO_CNTB         TD_NU_016_004,  
@VSDE_CADE_IMPR         TD_VC_020,  
@VSCO_MONE_CNTB         TD_VC_003,  
@CNNU_REGI_EMPR         TD_IN_001,  
@CSCO_PART  TD_VC_020,  
@CNPO_APLI  TD_NU_015_006,  
@CSCO_DOMI  TD_VC_003,  
@CNTI_SIGN_CONT         TD_IN_001,  
@CNTI_OPER_ARIT         TD_IN_001,  
@CSCO_MONE_PART         TD_VC_003,  
@CSTI_CAMB_PART         TD_VC_003,   
@VNIM_MVTO  TD_NU_016_004,  
@VNIM_MVTO_ACUM         TD_NU_016_004,  
@VNPO_APLI_DOMI         TD_NU_015_006,  
@VSST_PRES  TD_VC_001,  
@CSTI_DOCU              TD_VC_003,  
@CSNU_DOCU              TD_VC_020,  
@CDFE_DOCU              TD_DT_001,

@CSCO_USUA_CREA         TD_VC_008,
@CSCO_USUA_MODI         TD_VC_008,
@CDFE_USUA_CREA         TD_DT_001_SIST,
@CDFE_USUA_MODI         TD_DT_001_SIST  

--------------- Variables Mayorizacion -------------------
  Declare CT_TXMVTO_CNTB_D02_1 Cursor
  For
  Select  T1.CO_EMPR,  	    T1.NU_CNTB_EMPR,  T1.CO_UNID_CNTB,  T1.CO_OPRC_CNTB,  T1.NU_ANNO, 
	  T1.NU_MESE,	    T1.NU_ASTO,       T1.NU_SECU,       T1.CO_CNTA_EMPR,  T1.TI_AUXI_EMPR, 
          T1.CO_AUXI_EMPR,  T1.TI_OPER,	      Round(T1.IM_MVTO_ORIG, 2),  Round(T1.IM_MVTO_CNTB, 2),  T1.SI_MVTO_CNTB, 
	  LTRIM(RTRIM(T1.CO_ORDE_SERV)) 
  From  TXMVTO_CNTB T1, TASALD_EMPR T2
  Where T1.CO_EMPR = @ISCO_EMPR
  And   T1.NU_CNTB_EMPR = @INNU_CNTB_EMPR
  And   T1.CO_UNID_CNTB = @ISCO_UNID_CNTB
  And   T1.CO_OPRC_CNTB = @ISCO_OPRC_CNTB
  And   T1.NU_ANNO = @INNU_ANNO
  And   T1.NU_MESE = @INNU_MESE
  And   T1.CO_UNID_ORIG = @ISCO_UNID_CNTB
  And   T1.NU_ASTO_ORIG = @ISNU_ASTO
  And   T1.NU_SECU_ORIG = @INNU_SECU
  And   T1.CO_CNTA_ORIG = @ISCO_CNTA_EMPR
  And   (T1.NU_PROC Is Null Or T1.NU_PROC = 0)
  And   (( ST_GEST = 'N'  ) Or ( ST_GEST = 'S' And ST_OTRS Is NULL ))
  And   T1.SI_MVTO_CNTB = 'APR'
  And   T1.CO_EMPR = T2.CO_EMPR
  And   T1.NU_CNTB_EMPR = T2.NU_CNTB_EMPR
  And   T1.CO_UNID_CNTB = T2.CO_UNID_CNTB
  And   T1.NU_ANNO = T2.NU_ANNO
  And   T1.NU_MESE = T2.NU_MESE
  And   T1.CO_CNTA_EMPR = T2.CO_CNTA_EMPR
  And   T2.TI_AUXI_EMPR IS NULL
  And   T2.CO_AUXI_EMPR IS NULL
  And   T2.CO_ORDE_SERV IS NULL

  Open  CT_TXMVTO_CNTB_D02_1
  Fetch CT_TXMVTO_CNTB_D02_1 Into
	  @CSCO_EMPR,		@CNNU_CNTB_EMPR,	@CSCO_UNID_CNTB,
	  @CSCO_OPRC_CNTB,	@CNNU_ANNO,		@CNNU_MESE,
	  @CSNU_ASTO,		@CNNU_SECU,		@CSCO_CNTA_EMPR,
	  @CSTI_AUXI_EMPR,	@CSCO_AUXI_EMPR,	@CSTI_OPER,
	  @CNIM_MVTO_ORIG,  	@CNIM_MVTO_CNTB,	@CSSI_MVTO_CNTB,
	  @CSCO_ORDE_SERV

  While @@Fetch_Status = 0
  Begin
    If  @@Fetch_Status < 0
      Begin
        Close CT_TXMVTO_CNTB_D02_1
        Deallocate CT_TXMVTO_CNTB_D02_1
      End
-- Inicio
    If @CSTI_AUXI_EMPR = ''
       Select @CSTI_AUXI_EMPR = NULL
    If @CSCO_AUXI_EMPR = ''
       Select @CSCO_AUXI_EMPR = NULL
    If @CSCO_ORDE_SERV = '' 
       Select @CSCO_ORDE_SERV = NULL

    If @CSTI_OPER = 'CAR'
      Begin
	Select @VNIM_ABON_ORIG = 0
	Select @VNIM_ABON_CNTB = 0
        Select @VNIM_CARG_ORIG = @CNIM_MVTO_ORIG
        Select @VNIM_CARG_CNTB = @CNIM_MVTO_CNTB
      End
    Else If @CSTI_OPER = 'ABO'
      Begin
        Select @VNIM_CARG_ORIG = 0
        Select @VNIM_CARG_CNTB = 0
	Select @VNIM_ABON_ORIG = @CNIM_MVTO_ORIG
	Select @VNIM_ABON_CNTB = @CNIM_MVTO_CNTB
      End

    If @CSSI_MVTO_CNTB = 'APR'
      Begin
        Update TASALD_EMPR
	Set  IM_CARG_CNTB = Round(Isnull(IM_CARG_CNTB,0) - Isnull(@VNIM_CARG_CNTB,0), 2),
	     IM_ABON_CNTB = Round(Isnull(IM_ABON_CNTB,0) - Isnull(@VNIM_ABON_CNTB,0), 2),
	     IM_CARG_ORIG = Round(Isnull(IM_CARG_ORIG,0) - Isnull(@VNIM_CARG_ORIG,0), 2) ,
	     IM_ABON_ORIG = Round(Isnull(IM_ABON_ORIG,0) - Isnull(@VNIM_ABON_ORIG,0), 2) ,
	     CO_USUA_MODI = System_User,  FE_USUA_MODI = GETDATE()
	WHERE CO_EMPR = @CSCO_EMPR
          AND CO_UNID_CNTB = @CSCO_UNID_CNTB
	  AND NU_CNTB_EMPR = @CNNU_CNTB_EMPR
	  AND NU_ANNO = @CNNU_ANNO
 	  AND NU_MESE = @CNNU_MESE
          AND CO_CNTA_EMPR = @CSCO_CNTA_EMPR
	  AND TI_AUXI_EMPR IS NULL
	  AND CO_AUXI_EMPR IS NULL
	  AND CO_ORDE_SERV IS NULL

        -- Caso Cuenta - SI Auxiliar - SI Orden Servicio  
        If @CSTI_AUXI_EMPR IS NOT NULL AND @CSCO_AUXI_EMPR IS NOT NULL AND @CSCO_ORDE_SERV IS NOT NULL 
	  Begin 
            Update TASALD_EMPR
            Set  IM_CARG_CNTB = Round(Isnull(IM_CARG_CNTB,0) - Isnull(@VNIM_CARG_CNTB,0), 2) ,
	         IM_ABON_CNTB = Round(Isnull(IM_ABON_CNTB,0) - Isnull(@VNIM_ABON_CNTB,0), 2) ,
	         IM_CARG_ORIG = Round(Isnull(IM_CARG_ORIG,0) - Isnull(@VNIM_CARG_ORIG,0), 2) ,
	         IM_ABON_ORIG = Round(Isnull(IM_ABON_ORIG,0) - Isnull(@VNIM_ABON_ORIG,0), 2) ,
		 CO_USUA_MODI = System_User,  FE_USUA_MODI = GETDATE()
            WHERE CO_EMPR = @CSCO_EMPR
            AND CO_UNID_CNTB = @CSCO_UNID_CNTB
            AND NU_CNTB_EMPR = @CNNU_CNTB_EMPR
            AND NU_ANNO = @CNNU_ANNO            AND NU_MESE = @CNNU_MESE
            AND CO_CNTA_EMPR = @CSCO_CNTA_EMPR
            AND TI_AUXI_EMPR = @CSTI_AUXI_EMPR
            AND CO_AUXI_EMPR = @CSCO_AUXI_EMPR
	    AND CO_ORDE_SERV = @CSCO_ORDE_SERV
	  End
        -- Caso Cuenta - SI Auxiliar - NO Orden Servicio  
        If @CSTI_AUXI_EMPR IS NOT NULL AND @CSCO_AUXI_EMPR IS NOT NULL AND @CSCO_ORDE_SERV IS NULL 
	  Begin 
            Update TASALD_EMPR
     Set  IM_CARG_CNTB = Round(Isnull(IM_CARG_CNTB,0) - Isnull(@VNIM_CARG_CNTB,0), 2) ,
	         IM_ABON_CNTB = Round(Isnull(IM_ABON_CNTB,0) - Isnull(@VNIM_ABON_CNTB,0), 2) ,
	         IM_CARG_ORIG = Round(Isnull(IM_CARG_ORIG,0) - Isnull(@VNIM_CARG_ORIG,0), 2) ,
	         IM_ABON_ORIG = Round(Isnull(IM_ABON_ORIG,0) - Isnull(@VNIM_ABON_ORIG,0), 2) ,
		 CO_USUA_MODI = System_User,  FE_USUA_MODI = GETDATE()
            WHERE CO_EMPR = @CSCO_EMPR
            AND CO_UNID_CNTB = @CSCO_UNID_CNTB
            AND NU_CNTB_EMPR = @CNNU_CNTB_EMPR
            AND NU_ANNO = @CNNU_ANNO
            AND NU_MESE = @CNNU_MESE
            AND CO_CNTA_EMPR = @CSCO_CNTA_EMPR
            AND TI_AUXI_EMPR = @CSTI_AUXI_EMPR
            AND CO_AUXI_EMPR = @CSCO_AUXI_EMPR
            AND CO_ORDE_SERV IS NULL
	  End
        -- Caso Cuenta - NO Auxiliar - CON Orden Servicio  
	If @CSTI_AUXI_EMPR IS NULL AND @CSCO_AUXI_EMPR IS NULL AND @CSCO_ORDE_SERV IS NOT NULL
	  Begin 
            Update TASALD_EMPR
            Set  IM_CARG_CNTB = Round(Isnull(IM_CARG_CNTB,0) - Isnull(@VNIM_CARG_CNTB,0), 2) ,
	         IM_ABON_CNTB = Round(Isnull(IM_ABON_CNTB,0) - Isnull(@VNIM_ABON_CNTB,0), 2) ,
	         IM_CARG_ORIG = Round(Isnull(IM_CARG_ORIG,0) - Isnull(@VNIM_CARG_ORIG,0), 2) ,
	         IM_ABON_ORIG = Round(Isnull(IM_ABON_ORIG,0) - Isnull(@VNIM_ABON_ORIG,0), 2) ,
		 CO_USUA_MODI = System_User,  FE_USUA_MODI = GETDATE()
            WHERE CO_EMPR = @CSCO_EMPR
            AND CO_UNID_CNTB = @CSCO_UNID_CNTB
            AND NU_CNTB_EMPR = @CNNU_CNTB_EMPR
            AND NU_ANNO = @CNNU_ANNO
            AND NU_MESE = @CNNU_MESE
            AND CO_CNTA_EMPR = @CSCO_CNTA_EMPR
            AND TI_AUXI_EMPR Is NULL
            AND CO_AUXI_EMPR Is NULL
            AND CO_ORDE_SERV = @CSCO_ORDE_SERV
	  End

        -- INICIO LOOP
	Select @VNNV_INFO_CNTA = NV_INFO_CNTA,
               @VSNV_QUIE_CNTA = NV_QUIE_CNTA  
        From   TMPARA_CONT
        Where  CO_EMPR = @CSCO_EMPR

        Select @VNCA_LONG = DataLength(Rtrim(@VSNV_QUIE_CNTA)) - 1
        Select @VNNU_FINA = 1

	-- Empieza a Trabajar
        While @VNNU_FINA = 1
        Begin
          -- Selecciona 
          Select @VNCA_INIC = @VNCA_LONG - 2
          Select @VNCA_LONG = @VNCA_LONG - 2
          Select @VNNV_AUXI = Convert(Int, Substring(@VSNV_QUIE_CNTA,@VNCA_INIC,2))
          -- El Nivel Detalle ya existe y si es cero no se hace nada
          If ( @VNNV_AUXI < @VNNV_INFO_CNTA ) And ( @VNNV_AUXI > 0 )
          Begin
            -- Inserta en la Tabla de Saldos
            Update TASALD_EMPR
            Set  IM_CARG_CNTB = Round(Isnull(IM_CARG_CNTB,0) - Isnull(@VNIM_CARG_CNTB,0), 2) ,
     	         IM_ABON_CNTB = Round(Isnull(IM_ABON_CNTB,0) - Isnull(@VNIM_ABON_CNTB,0), 2) ,
	         CO_USUA_MODI = System_User,  FE_USUA_MODI = GETDATE()
	    WHERE CO_EMPR = @CSCO_EMPR
            AND CO_UNID_CNTB = @CSCO_UNID_CNTB
	    AND NU_CNTB_EMPR = @CNNU_CNTB_EMPR
	    AND NU_ANNO = @CNNU_ANNO
	    AND NU_MESE = @CNNU_MESE
            AND Datalength(CO_CNTA_EMPR) = @VNNV_AUXI
            AND CO_CNTA_EMPR = Substring(@CSCO_CNTA_EMPR,1,@VNNV_AUXI)
	    AND TI_AUXI_EMPR IS NULL
 	    AND CO_AUXI_EMPR IS NULL
	    AND CO_ORDE_SERV IS NULL
          End
          If @VNCA_INIC <= 0
            Select @VNNU_FINA = 0       
        End --  While @VNNU_FINA = 1
-- FIN LOOP
      End --  If @CSSI_MVTO_CNTB = 'APR'
-- Fin
  Fetch CT_TXMVTO_CNTB_D02_1 Into
	  @CSCO_EMPR,		@CNNU_CNTB_EMPR,	@CSCO_UNID_CNTB,
	  @CSCO_OPRC_CNTB,	@CNNU_ANNO,		@CNNU_MESE,
	  @CSNU_ASTO,		@CNNU_SECU,		@CSCO_CNTA_EMPR,
	  @CSTI_AUXI_EMPR,	@CSCO_AUXI_EMPR,	@CSTI_OPER,
	  @CNIM_MVTO_ORIG,  	@CNIM_MVTO_CNTB,	@CSSI_MVTO_CNTB,
	  @CSCO_ORDE_SERV
 
  End  -- end del while @@Fetch_Status = 0

  Close CT_TXMVTO_CNTB_D02_1
  Deallocate CT_TXMVTO_CNTB_D02_1

End
/*------------------------ Fin ----------------------*/





GO
